在 Day 24 我們介紹了 Cookie 這種儲存資料的方式,也說了一些 Cookie 的缺點。在 Day 25 我們要介紹改進 Cookie 缺點的儲存資料的方式:Session
Session 可以說是伺服器端的 Cookie ,因為 Cookie 儲存在用戶端會被竄改,所以把儲存的資料放在伺服器端就不會被竄改了。
那 Session 是怎麼知道哪筆資料是哪個用戶的呢,以 PHP 的機制來說,還是需要用到用戶端的 Cookie 。只不過 Cookie 名稱固定叫 PHPSESSID,後面帶的值是一個很亂的雜湊,可以避免重複。
PHPSESSID 這個 Cookie 修改了意義也不大,如果修改掉值,伺服器端反而會不認得用戶,會被要求重新操作。所以算是相對可靠的儲存資料方式。
其實 PHP 的 Session 寫法與 Cookie 沒有差很多,畢竟是差不多性質的東西。我們改寫一下 Day 24 的數數字網頁,讓需要 SAN 值檢測的不只史蒂夫(゚∀゚)
<?php
session_start();
$session_name = "number";
echo '現在數到 ';
if(!isset($_SESSION[$session_name])) {
echo '0';
$_SESSION[$session_name] = 0;
} else {
$_SESSION[$session_name] = $_SESSION[$session_name]+1;
echo $_SESSION[$session_name];
}
?>
<form action="test.php" method="post">
<input type="submit" name="submit" value="+1">
</form>
跟 Day 24 比較一下差異,Session 要使用之前需要先使用 session_start()
這個 Function 。一樣可以使用 isset()
這個 Function 檢查 Session 是否存在。設定值的部分比 Cookie 更直觀,可以直接使用等於來改寫數值。
至於要怎麼清掉 Session ,可以使用 unset($_SESSION[])
或是 session_destroy()
都可以清掉用戶端 Session 的紀錄。